//-----------------------------------------------------------------------------
// LesDecors.js			:  Classe contenant tous les decors
//
//	Author : Pizzi
//	Dcreat : 28/10/2012 00:30
//	Dmodif : 08/11/2012 20:45
//-----------------------------------------------------------------------------

(function (window) {
	
	// Instance de la classe
	LesDecors.instance = null;
	
	//Constructeur
	function LesDecors() {
		this.tabLesDecors = new Array();
		this.intNbrDecors = 0;
		
		//Si on ne passe pas par GetInstance pour récupérer l'instance
		//On génére une erreur
		if (LesDecors.caller != LesDecors.GetInstance) {
			throw new Error("On ne peut pas instancier LesDecors, on doit récuperer par GetInstance, c'est un singleton");
		}
	}
	
	//Pattern de Singleton
	LesDecors.GetInstance = function () {
		if (LesDecors.instance == null) {
			LesDecors.instance = new LesDecors();
		}
		return LesDecors.instance;
	}
	
	//Ajoute un décor dans le tableau
	LesDecors.prototype.Add = function (decor) {
		this.tabLesDecors[this.GetNbDecors()] = decor;
		stage.addChild(decor);
		this.intNbrDecors += 1;
	}
	
	//Retourne la liste des decors
	LesDecors.prototype.Get = function () {
		return this.tabLesDecors;
	}
	
	//Boucle sur tous les décors
	LesDecors.prototype.tick = function () {
		// Verifier la fin de l'explosion du décor
		for (var i = 0; i <= this.tabLesDecors.length - 1; i++) {
			if (this.tabLesDecors[i].currentFrame == 8) {
				this.SupprimerAtIndex(this.tabLesDecors[i].intIndex);
			}
		}
	}
	
	//Supprimer un décor par son index
	LesDecors.prototype.SupprimerAtIndex = function (intIndex){
		// -- On enlève le décor du dessin
		stage.removeChild(this.tabLesDecors[intIndex]);
		this.tabLesDecors.splice(intIndex, 1);
		this.intNbrDecors -= 1;
		// -- On remet les index pour les autres décors
		for (var i = intIndex; i <= this.tabLesDecors.length - 1; i++){
			this.tabLesDecors[i].intIndex--;
		}
	}
	
	//Detruire un décor par son index
	LesDecors.prototype.DeleteAtIndex = function (intIndex) {
		//On enregistre les coordonnées du décor pour la bombe
		x = this.tabLesDecors[intIndex].x;
		y = this.tabLesDecors[intIndex].y;
		// -- On met l'animation de destruction du décor
		this.tabLesDecors[intIndex].gotoAndPlay("explose");
		// -- On regarde si le décor laisse un bonus (ou pas)
		typeBombe = this.ChoisirBonus(4,1);
		switch (typeBombe){
			case 1 : new Bonus(1, sprHealth, new createjs.Point(x + 95,y + 145),new createjs.Point(50,50),new XNARectangle(400,400,32,32));break;
			case 2 : new Bonus(2, sprShield, new createjs.Point(x + 95,y + 145),new createjs.Point(50,50),new XNARectangle(400,400,32,32));break;
			case 3 : new Bonus(3, sprSprint, new createjs.Point(x + 95,y + 145),new createjs.Point(50,50),new XNARectangle(400,400,32,32));break;
			case 4 : new Bonus(4, sprAttack, new createjs.Point(x + 95,y + 145),new createjs.Point(50,50),new XNARectangle(400,400,32,32));break;
		}
	}
	
	LesDecors.prototype.ChoisirBonus = function (intMax,intMin){
		var typeBombe = null;
		var random = Math.floor((Math.random()*intMax)+intMin);
		// On sélectionne le type de Bonus aléatoirement
		typeBombe = random;
		return typeBombe;
	}
	
	//Retourne le nombre de decors
	LesDecors.prototype.GetNbDecors = function () {
		return this.intNbrDecors;
	}
	
	//Retourne s'il y a une collision (explosion)
	LesDecors.prototype.GetExplosionDecor = function (recZone) {
		for (var i = 0; i <= this.tabLesDecors.length - 1; i++){
			//alert(this.tabLesDecors[i].bolIsBreakable);
			if (this.tabLesDecors[i].bolIsBreakable == true)
			{
				if (this.tabLesDecors[i].GetRectangle().Intersects(recZone))
				{this.tabLesDecors[i].bolIsBreakable = false;this.DeleteAtIndex(i);}
			}
		}
	}
	
	//Retourne s'il y a une collision (deplacement)
	LesDecors.prototype.GetCollisionDecor = function (recZone) {
		for (var i = 0; i <= this.tabLesDecors.length - 1; i++){
			if (this.tabLesDecors[i].GetRectangle().Intersects(recZone))
			{return true;}
		}
		return false;
	}
	
	window.LesDecors = LesDecors;
}(window));
